package suray.rgv.communication.data.status;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * 读取到的两栖车数据
 */
@NoArgsConstructor
@Data
public class RobotInfoData1 {

    @SerializedName("19204")
    private Integer $19204;
    @SerializedName("19204_ip")
    private List<String> $19204Ip;
    @SerializedName("19205")
    private Integer $19205;
    @SerializedName("19205_ip")
    private List<String> $19205Ip;
    @SerializedName("19206")
    private Integer $19206;
    @SerializedName("19206_ip")
    private List<String> $19206Ip;
    @SerializedName("19207")
    private Integer $19207;
    @SerializedName("19207_ip")
    private List<String> $19207Ip;
    @SerializedName("19210")
    private Integer $19210;
    @SerializedName("19210_ip")
    private List<?> $19210Ip;
    @SerializedName("19301_ip")
    private List<String> $19301Ip;
    @JsonProperty("DI")
    private List<DIDTO> DI;
    @JsonProperty("DO")
    private List<DODTO> DO;
    @JsonProperty("MAC")
    private String mac;
    @JsonProperty("WLANMAC")
    private String wlanmac;
    @JsonProperty("advance_regions")
    private List<?> advanceRegions;
    @JsonProperty("angle")
    private Double angle;
    @JsonProperty("ap_addr")
    private String apAddr;
    @JsonProperty("area_ids")
    private List<?> areaIds;
    @JsonProperty("auto_charge")
    private Boolean autoCharge;
    @JsonProperty("battery_cycle")
    private Integer batteryCycle;
    @JsonProperty("battery_level")
    private Float batteryLevel;
    @JsonProperty("battery_temp")
    private Float batteryTemp;
    @JsonProperty("battery_user_data")
    private String batteryUserData;
    @JsonProperty("block_x")
    private Float blockX;
    @JsonProperty("block_y")
    private Float blockY;
    @JsonProperty("blocked")
    private Boolean blocked;
    @JsonProperty("block_reason")
    private Integer blockReason;
    @JsonProperty("brake")
    private Boolean brake;
    @JsonProperty("calib_status")
    private CalibStatusDTO calibStatus;
    @JsonProperty("charging")
    private Boolean charging;
    @JsonProperty("confidence")
    private Double confidence;
    @JsonProperty("containers")
    private List<ContainersDTO> containers;
    @JsonProperty("controller_humi")
    private Float controllerHumi;
    @JsonProperty("controller_temp")
    private Float controllerTemp;
    @JsonProperty("controller_voltage")
    private Float controllerVoltage;
    @JsonProperty("correction_errs")
    private List<Double> correctionErrs;
    @JsonProperty("create_on")
    private String createOn;
    @JsonProperty("current")
    private Float current;
    @JsonProperty("current_ip")
    private String currentIp;
    @JsonProperty("current_lock")
    private CurrentLockDTO currentLock;
    @JsonProperty("current_map")
    private String currentMap;
    @JsonProperty("current_map_entries")
    private List<?> currentMapEntries;
    @JsonProperty("current_map_md5")
    private String currentMapMd5;
    @JsonProperty("current_station")
    private String currentStation;
    @JsonProperty("detect_skid")
    private Boolean detectSkid;
    @JsonProperty("di_max_node")
    private Integer diMaxNode;
    @JsonProperty("dispatch_mode")
    private Integer dispatchMode;
    @JsonProperty("do_max_node")
    private Integer doMaxNode;
    @JsonProperty("driver_emc")
    private Boolean driverEmc;
    @JsonProperty("electric")
    private Boolean electric;
    @JsonProperty("emergency")
    private Boolean emergency;
    @JsonProperty("errors")
    private List<FaultDTO> errors;
    @JsonProperty("fatals")
    private List<FaultDTO> fatals;
    @JsonProperty("finished_path")
    private List<String> finishedPath;
    @JsonProperty("fork_auto_flag")
    private Boolean forkAutoFlag;
    @JsonProperty("fork_height")
    private Float forkHeight;
    @JsonProperty("fork_height_in_place")
    private Boolean forkHeightInPlace;
    @JsonProperty("fork_pressure_actual")
    private Integer forkPressureActual;
    @JsonProperty("forward_in_place")
    private Boolean forwardInPlace;
    @JsonProperty("forward_val")
    private Integer forwardVal;
    @JsonProperty("goods_region")
    private GoodsRegionDTO goodsRegion;
    @JsonProperty("head")
    private Double head;
    @JsonProperty("hook_angle")
    private Integer hookAngle;
    @JsonProperty("hook_clamping_state")
    private Boolean hookClampingState;
    @JsonProperty("hook_emc")
    private Boolean hookEmc;
    @JsonProperty("hook_enable")
    private Boolean hookEnable;
    @JsonProperty("hook_error_code")
    private Integer hookErrorCode;
    @JsonProperty("hook_height")
    private Integer hookHeight;
    @JsonProperty("hook_isFull")
    private Boolean hookIsfull;
    @JsonProperty("hook_mode")
    private Boolean hookMode;
    @JsonProperty("hook_state")
    private Integer hookState;
    @JsonProperty("in_forbidden_area")
    private Boolean inForbiddenArea;
    @JsonProperty("is_stop")
    private Boolean isStop;
    @JsonProperty("jack_emc")
    private Boolean jackEmc;
    @JsonProperty("jack_enable")
    private Boolean jackEnable;
    @JsonProperty("jack_error_code")
    private Integer jackErrorCode;
    @JsonProperty("jack_height")
    private Integer jackHeight;
    @JsonProperty("jack_isFull")
    private Boolean jackIsfull;
    @JsonProperty("jack_load_times")
    private Integer jackLoadTimes;
    @JsonProperty("jack_mode")
    private Boolean jackMode;
    @JsonProperty("jack_speed")
    private Integer jackSpeed;
    @JsonProperty("jack_state")
    private Integer jackState;
    @JsonProperty("lasers")
    private List<LasersDTO> lasers;
    @JsonProperty("last_station")
    private String lastStation;
    @JsonProperty("loadmap_status")
    private Integer loadmapStatus;
    @JsonProperty("loc_state")
    private Integer locState;
    @JsonProperty("manualBlock")
    private Boolean manualBlock;
    @JsonProperty("manual_charge")
    private Boolean manualCharge;
    @JsonProperty("max_charge_current")
    private Float maxChargeCurrent;
    @JsonProperty("max_charge_voltage")
    private Float maxChargeVoltage;
    @JsonProperty("mode")
    private Integer mode;
    @JsonProperty("model_md5")
    private String modelMd5;
    @JsonProperty("motor_info")
    private List<MotorInfoDTO> motorInfo;
    @JsonProperty("motor_steer_angles")
    private List<?> motorSteerAngles;
    @JsonProperty("move_status_info")
    private String moveStatusInfo;
    @JsonProperty("nearest_obstacles")
    private List<?> nearestObstacles;
    @JsonProperty("notices")
    private List<?> notices;
    @JsonProperty("odo")
    private Double odo;
    @JsonProperty("path")
    private List<?> path;
    @JsonProperty("peripheral_data")
    private List<?> peripheralData;
    @JsonProperty("pgvs")
    private List<?> pgvs;
    @JsonProperty("pitch")
    private Integer pitch;
    @JsonProperty("point_cloud")
    private Object pointCloud;
    @JsonProperty("r_spin")
    private Integer rSpin;
    @JsonProperty("r_steer")
    private Integer rSteer;
    @JsonProperty("r_steer_angles")
    private List<Integer> rSteerAngles;
    @JsonProperty("r_vx")
    private Integer rVx;
    @JsonProperty("r_vy")
    private Integer rVy;
    @JsonProperty("r_w")
    private Double rW;
    @JsonProperty("radius")
    private Integer radius;
    @JsonProperty("ref_pos")
    private Object refPos;
    @JsonProperty("reliabilities")
    private List<Double> reliabilities;
    @JsonProperty("reloc_status")
    private Integer relocStatus;
    @JsonProperty("removed_regions")
    private List<?> removedRegions;
    @JsonProperty("rfids")
    private List<?> rfids;
    @JsonProperty("robot_note")
    private String robotNote;
    @JsonProperty("robot_region")
    private RobotRegionDTO robotRegion;
    @JsonProperty("roll")
    private Integer roll;
    @JsonProperty("roller_emc")
    private Boolean rollerEmc;
    @JsonProperty("roller_enable")
    private Boolean rollerEnable;
    @JsonProperty("roller_error_code")
    private Integer rollerErrorCode;
    @JsonProperty("roller_isFull")
    private Boolean rollerIsfull;
    @JsonProperty("roller_mode")
    private Boolean rollerMode;
    @JsonProperty("roller_speed")
    private Integer rollerSpeed;
    @JsonProperty("roller_state")
    private Integer rollerState;
    @JsonProperty("rssi")
    private Integer rssi;
    @JsonProperty("running_status")
    private Integer runningStatus;
    @JsonProperty("script_res")
    private String scriptRes;
    @JsonProperty("script_status")
    private Integer scriptStatus;
    @JsonProperty("shape")
    private Integer shape;
    @JsonProperty("similarity")
    private Integer similarity;
    @JsonProperty("slam_status")
    private Integer slamStatus;
    @JsonProperty("slow_path")
    private SlowPathDTO slowPath;
    @JsonProperty("slowed")
    private Boolean slowed;
    @JsonProperty("soft_emc")
    private Boolean softEmc;
    @JsonProperty("spin")
    private String spin;
    @JsonProperty("src_release")
    private Boolean srcRelease;
    @JsonProperty("ssid")
    private String ssid;
    @JsonProperty("steer")
    private String steer;
    @JsonProperty("steer_angles")
    private List<String> steerAngles;
    @JsonProperty("stop_path")
    private StopPathDTO stopPath;
    @JsonProperty("tail")
    private Double tail;
    @JsonProperty("target_dist")
    private Double targetDist;
    @JsonProperty("target_id")
    private String targetId;
    @JsonProperty("target_label")
    private String targetLabel;
    @JsonProperty("target_point")
    private List<Double> targetPoint;
    @JsonProperty("target_x")
    private Integer targetX;
    @JsonProperty("target_y")
    private Integer targetY;
    @JsonProperty("task_status")
    private Integer taskStatus;
    @JsonProperty("task_type")
    private Integer taskType;
    @JsonProperty("tasklist_status")
    private TasklistStatusDTO tasklistStatus;
    @JsonProperty("time")
    private Integer time;
    @JsonProperty("today_odo")
    private Double todayOdo;
    @JsonProperty("total_time")
    private Long totalTime;
    @JsonProperty("tracking_status")
    private Integer trackingStatus;
    @JsonProperty("transparent_data")
    private TransparentDataDTO transparentData;
    @JsonProperty("ultrasonic_nodes")
    private List<?> ultrasonicNodes;
    @JsonProperty("unfinished_path")
    private List<String> unfinishedPath;
    @JsonProperty("update_reason")
    private Integer updateReason;
    @JsonProperty("user_objects")
    private List<?> userObjects;
    @JsonProperty("vehicle_id")
    private String vehicleId;
    @JsonProperty("voltage")
    private Float voltage;
    @JsonProperty("vx")
    private String vx;
    @JsonProperty("vy")
    private String vy;
    @JsonProperty("w")
    private Double w;
    @JsonProperty("warnings")
    private List<FaultDTO> warnings;
    @JsonProperty("width")
    private Double width;
    @JsonProperty("x")
    private Double x;
    @JsonProperty("y")
    private Double y;
    @JsonProperty("yaw")
    private Double yaw;

    @NoArgsConstructor
    @Data
    public static class CalibStatusDTO {
        @JsonProperty("desc")
        private String desc;
        @JsonProperty("status")
        private Integer status;
    }

    @NoArgsConstructor
    @Data
    public static class CurrentLockDTO {
        @JsonProperty("desc")
        private String desc;
        @JsonProperty("ip")
        private String ip;
        @JsonProperty("locked")
        private Boolean locked;
        @JsonProperty("nick_name")
        private String nickName;
        @JsonProperty("port")
        private Integer port;
        @JsonProperty("time_t")
        private Integer timeT;
        @JsonProperty("type")
        private Integer type;
    }

    @NoArgsConstructor
    @Data
    public static class GoodsRegionDTO {
        @JsonProperty("name")
        private String name;
        @JsonProperty("point")
        private List<?> point;
    }

    @NoArgsConstructor
    @Data
    public static class RobotRegionDTO {
        @JsonProperty("name")
        private String name;
        @JsonProperty("point")
        private List<PointDTO> point;

        @NoArgsConstructor
        @Data
        public static class PointDTO {
            @JsonProperty("x")
            private Double x;
            @JsonProperty("y")
            private Double y;
        }
    }

    @NoArgsConstructor
    @Data
    public static class SlowPathDTO {
        @JsonProperty("name")
        private String name;
        @JsonProperty("point")
        private List<?> point;
    }

    @NoArgsConstructor
    @Data
    public static class StopPathDTO {
        @JsonProperty("name")
        private String name;
        @JsonProperty("point")
        private List<?> point;
    }

    @NoArgsConstructor
    @Data
    public static class TasklistStatusDTO {
    }

    @NoArgsConstructor
    @Data
    public static class TransparentDataDTO {
    }

    @NoArgsConstructor
    @Data
    public static class DIDTO {
        @JsonProperty("id")
        private Integer id;
        @JsonProperty("source")
        private String source;
        @JsonProperty("status")
        private Boolean status;
        @JsonProperty("valid")
        private Boolean valid;
    }

    @NoArgsConstructor
    @Data
    public static class DODTO {
        @JsonProperty("id")
        private Integer id;
        @JsonProperty("source")
        private String source;
        @JsonProperty("status")
        private Boolean status;
    }

    @NoArgsConstructor
    @Data
    public static class ContainersDTO {
        @JsonProperty("container_name")
        private String containerName;
        @JsonProperty("desc")
        private String desc;
        @JsonProperty("goods_id")
        private String goodsId;
        @JsonProperty("has_goods")
        private Boolean hasGoods;
    }

    @NoArgsConstructor
    @Data
    public static class LasersDTO {
        @JsonProperty("beams")
        private List<BeamsDTO> beams;
        @JsonProperty("device_info")
        private DeviceInfoDTO deviceInfo;
        @JsonProperty("header")
        private HeaderDTO header;
        @JsonProperty("install_info")
        private InstallInfoDTO installInfo;
        @JsonProperty("use_forLoc")
        private Boolean useForloc;

        @NoArgsConstructor
        @Data
        public static class DeviceInfoDTO {
            @JsonProperty("device_name")
            private String deviceName;
            @JsonProperty("max_angle")
            private Integer maxAngle;
            @JsonProperty("max_range")
            private Integer maxRange;
            @JsonProperty("min_angle")
            private Integer minAngle;
            @JsonProperty("pub_step")
            private Double pubStep;
            @JsonProperty("real_step")
            private Double realStep;
            @JsonProperty("scan_freq")
            private Integer scanFreq;
        }

        @NoArgsConstructor
        @Data
        public static class HeaderDTO {
            @JsonProperty("data_nsec")
            private String dataNsec;
            @JsonProperty("frame_id")
            private String frameId;
            @JsonProperty("pub_nsec")
            private String pubNsec;
        }

        @NoArgsConstructor
        @Data
        public static class InstallInfoDTO {
            @JsonProperty("upside")
            private Boolean upside;
            @JsonProperty("x")
            private Double x;
            @JsonProperty("z")
            private Double z;
        }

        @NoArgsConstructor
        @Data
        public static class BeamsDTO {
            @JsonProperty("angle")
            private Float angle;
            @JsonProperty("dist")
            private Double dist;
            @JsonProperty("rssi")
            private Integer rssi;
            @JsonProperty("valid")
            private Boolean valid;
        }
    }

    @NoArgsConstructor
    @Data
    public static class MotorInfoDTO {
        @JsonProperty("calib")
        private Boolean calib;
        @JsonProperty("can_id")
        private Integer canId;
        @JsonProperty("can_router")
        private Integer canRouter;
        @JsonProperty("current")
        private Integer current;
        @JsonProperty("emc")
        private Boolean emc;
        @JsonProperty("encoder")
        private Integer encoder;
        @JsonProperty("err")
        private Boolean err;
        @JsonProperty("error_code")
        private Integer errorCode;
        @JsonProperty("follow_err")
        private Boolean followErr;
        @JsonProperty("motor_name")
        private String motorName;
        @JsonProperty("passive")
        private Boolean passive;
        @JsonProperty("position")
        private Double position;
        @JsonProperty("raw_position")
        private Integer rawPosition;
        @JsonProperty("speed")
        private Double speed;
        @JsonProperty("stop")
        private Boolean stop;
        @JsonProperty("temperature")
        private Integer temperature;
        @JsonProperty("type")
        private Integer type;
        @JsonProperty("voltage")
        private Integer voltage;
    }

    @NoArgsConstructor
    @Data
    public static class FaultDTO {
        @JsonProperty("55001")
        private Integer $55001;
        @JsonProperty("desc")
        private String desc;
        @JsonProperty("times")
        private Integer times;
    }
    @JsonProperty("ret_code")
    private Integer retCode;
    @JsonProperty("err_msg")
    private String errMsg;
}
